﻿Imports Controle

Public Class frmOcorrencia

#Region "Variáveis"
    Private prvIDCliente As Int32
    Private prvIDContato As Int32
    Private prvIDStatus As Int32
    Private prvIDOcorrencia As Int32
    Private prvInicio As Date
    Private prvFim As Date
    Private prvIDUsuario As Int32
    Private prvOrigem As eFormularioOrigem

    Private sMensagemValidacao As String = ""

    Private objStatus As New ctrStatus
    Private objClientes As New ctrCliente
    Private objContato As New ctrContato
    Private objOcorrencias As New ctrOcorrencias
    Private objUsuarios As New ctrUsuario
    Private dsContatos As New DataSet

#End Region

#Region "Enumerações"
    Public Enum eFormularioOrigem
        adMenu = 0
        adTarefas = 1
    End Enum

#End Region

#Region "Propriedades"

    Public Property IDCliente()
        Get
            Return prvIDCliente
        End Get
        Set(ByVal value)
            prvIDCliente = value
        End Set
    End Property

    Public WriteOnly Property Origem()
        Set(ByVal value)
            prvOrigem = value
        End Set
    End Property

    Public WriteOnly Property IDOCorrencia()

        Set(ByVal value)
            prvIDOcorrencia = value
        End Set

    End Property

#End Region

#Region "Métodos"

    Public Overrides Sub AbrirTela(ByVal modo As eModo)

        MyBase.modoAtual = modo

    End Sub

    Public Overrides Sub ClickNovo()

        Try
            If (Me.validaNovoRegistro) Then
                prvInicio = Date.Now
                Me.Codigo = 0
                txtCodAtendimento.Text = String.Empty

                Me.cmdCancelar.Text = "Cancelar"
                Me.modoAtual = eModo.eInserir
                Me.Text = "Ocorrências"
                Me.txtObservacoes.Text = String.Empty
                txtObservacoes.Focus()
            Else
                MsgBox(Me.sMensagemValidacao, MsgBoxStyle.Exclamation, Me.Text)
                MyBase.modoAtual = eModo.eAguardar
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Sub

    Public Function CarregaDados() As Boolean
        Dim dtUltimoContato As Date
        Dim sMsg As String
        Dim drCliente As DataRow
        Dim drOcorrencia As DataRow
        Dim bRetorno As Boolean = True

        Try
            If (prvIDOcorrencia > 0) Then
                Me.Codigo = prvIDOcorrencia
                drOcorrencia = objOcorrencias.SelecionaOcorrencia(prvIDOcorrencia)
                If (Not drOcorrencia Is Nothing) Then
                    With drOcorrencia
                        IDCliente = Persistencia.perConversao.nuloParaZero(.Item("IDCliente"))
                        prvIDContato = Persistencia.perConversao.nuloParaZero(.Item("IDContato"))
                        prvIDUsuario = Persistencia.perConversao.nuloParaZero(.Item("IDUsuario"))
                        txtCodAtendimento.Text = prvIDOcorrencia
                        txtData.Text = Persistencia.perConversao.nuloParaData(.Item("DataInicio")).Date
                        If (.Item("IDUsuario") Is DBNull.Value) Then
                            txtAtendente.Text = "MIGRADO"
                        Else
                            txtAtendente.Text = objUsuarios.retornarCampoUsuario("Nome", .Item("IDUsuario")).Item("Nome")
                        End If
                        txtObservacoes.Text = Persistencia.perConversao.nuloParaVazio(.Item("Observacoes"))
                    End With
                End If
            Else
                txtData.Text = Date.Now.Date
                txtAtendente.Text = Persistencia.perConversao.nuloParaVazio( _
                                    objUsuarios.retornarCampoUsuario("Nome", frmPrincipal.objUsuario.Usuario).Item("Nome"))
                dtUltimoContato = objOcorrencias.RetornaUltimoContato(prvIDCliente).Date.ToString
                If (Not dtUltimoContato.Date = Date.MinValue) Then
                    If (dtUltimoContato.Date = Date.Now.Date) Then
                        sMsg = "Este cliente já foi contactado na data de hoje." & vbCrLf
                        sMsg &= " Deseja continuar?"
                        If (MsgBox(sMsg, MsgBoxStyle.YesNo, "Atenção") = MsgBoxResult.No) Then
                            If (prvOrigem = eFormularioOrigem.adTarefas) Then
                                bRetorno = False
                            Else
                                Limpar(fraCliente)
                                Exit Function
                            End If
                        End If
                    End If
                End If
            End If

            drCliente = objClientes.selecionarCliente(prvIDCliente)

            If Not drCliente Is Nothing Then

                txtIDCliente.Text = prvIDCliente
                txtNomeCliente.Text = drCliente.Item("RazaoSocial").ToString
                If (Persistencia.perConversao.nuloParaData(drCliente.Item("ProximoContato")) <> Date.MinValue) Then
                    txtProxContato.Text = Persistencia.perConversao.nuloParaData(drCliente.Item("ProximoContato"))
                End If
                prvIDStatus = Persistencia.perConversao.nuloParaZero(drCliente.Item("IDStatus"))
                If (dtUltimoContato <> Date.MinValue) Then
                    txtUltimoContato.Text = dtUltimoContato.Date
                End If
                lblStatusCliente.Text = Persistencia.perConversao.nuloParaVazio(drCliente.Item("Descricao").ToString)

                Call CarregaDadosContato(True)

            End If
        Catch ex As Exception
            bRetorno = False
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

        Return bRetorno

    End Function
    Private Sub CarregaDadosContato(ByVal Principal As Boolean)

        If (prvIDContato > 0) Then
            dsContatos = objContato.selecionarContato(prvIDContato, prvIDCliente, False)
        Else
            dsContatos = objContato.selecionarContato(prvIDContato, prvIDCliente, Principal)
        End If

        With dsContatos.Tables("DC_Contatos")
            If (.Rows.Count > 0) Then
                prvIDContato = Persistencia.perConversao.nuloParaZero(.Rows(0).Item("IDContato"))
                txtContato.Text = .Rows(0).Item("NomeContato").ToString
                txtDepto.Text = .Rows(0).Item("Departamento").ToString
                txtEmail.Text = .Rows(0).Item("Email").ToString
                txtTelefone.Text = Persistencia.perConversao.nuloParaVazio(.Rows(0).Item("Telefone").ToString)
                txtCelular.Text = Persistencia.perConversao.nuloParaVazio(.Rows(0).Item("Celular").ToString)
                txtFax.Text = Persistencia.perConversao.nuloParaVazio(.Rows(0).Item("Fax").ToString)
                chkPrincipal.CheckState = IIf(Persistencia.perConversao.nuloParaBoleano(.Rows(0).Item("Principal")) = 0, CheckState.Unchecked, CheckState.Indeterminate)
            Else
                prvIDContato = 0
                chkPrincipal.CheckState = CheckState.Unchecked
            End If
        End With

        modoAtual = modoAtual

    End Sub
    Private Sub LimparDadosContato()

        Limpar(fraContato)

    End Sub
    Private Function validaFormulario() As Boolean

        Try
            Dim bRetorno As Boolean = True

            If (Me.prvIDCliente <= 0) Then
                sMensagemValidacao = "- Cliente obrigatório." & vbCrLf
                bRetorno = False
            End If

            If (Me.prvIDContato <= 0) Then
                sMensagemValidacao &= "- Contato obrigatório." & vbCrLf
                bRetorno = False
            End If

            If Me.txtObservacoes.Text = String.Empty Then
                sMensagemValidacao &= "- Descrição obrigatória." & vbCrLf
                bRetorno = False
            End If

            Return bRetorno

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Function
    Private Function validaNovoRegistro() As Boolean

        Try
            Dim bRetorno As Boolean = True

            If (Me.prvIDCliente <= 0) Then
                sMensagemValidacao = "- Cliente obrigatório." & vbCrLf
                bRetorno = False
            End If

            If (Me.prvIDContato <= 0) Then
                sMensagemValidacao &= "- Contato obrigatório." & vbCrLf
                bRetorno = False
            End If

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)

        End Try

    End Function

    Private Sub frmOcorrencia_alteraModo(ByVal eModoAtual As frmPadrao.eModo) Handles Me.alteraModo

        If (eModoAtual = eModo.eAguardar Or eModoAtual = eModo.eExcluir) Then
            fraDadosAtendimento.Enabled = True
            Me.txtObservacoes.Enabled = False
            Me.cmdProcura.Enabled = (Not prvIDOcorrencia > 0)
            Me.cmdEditarCliente.Enabled = (prvIDCliente > 0)
            Me.cmdLimparCliente.Enabled = (prvIDCliente > 0 And Not prvIDOcorrencia > 0)
            Me.cmdProcuraContato.Enabled = (prvIDCliente > 0 And prvIDOcorrencia = 0) _
                                           Or (prvIDOcorrencia > 0 And prvIDUsuario = frmPrincipal.objUsuario.Usuario And prvIDCliente > 0)
            Me.cmdEditarContato.Enabled = (prvIDCliente > 0)
            Me.cmdLimparContato.Enabled = (prvIDCliente > 0 And prvIDContato > 0 And prvIDOcorrencia = 0) _
                                          Or (prvIDOcorrencia > 0 And prvIDUsuario = frmPrincipal.objUsuario.Usuario And prvIDCliente > 0)
            MyBase.cmdExcluir.Enabled = (prvIDOcorrencia > 0 And prvIDUsuario = frmPrincipal.objUsuario.Usuario)
            MyBase.cmdCancelar.Enabled = (prvIDOcorrencia > 0 And prvIDUsuario = Persistencia.perGlobais.prvIDUsuario)
        Else
            Me.txtObservacoes.Enabled = True
            Me.cmdProcuraContato.Enabled = (prvIDOcorrencia > 0)
            Me.cmdProcura.Enabled = False
            Me.cmdEditarCliente.Enabled = (prvIDOcorrencia > 0)
            Me.cmdLimparCliente.Enabled = False
            Me.cmdEditarContato.Enabled = (prvIDOcorrencia > 0)
            Me.cmdLimparContato.Enabled = (prvIDOcorrencia > 0)
        End If

    End Sub
#End Region

    Private Sub cmdProcura_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProcura.Click
        Dim sql As String
        Dim frmDialogo As New frmPesquisa
        sql = Me.objClientes.SqlConsulta(False)

        prvIDCliente = 0
        prvIDContato = 0

        Limpar(Me)

        With frmDialogo
            .Campos = "iIDCliente,sRazaoSocial"
            .Descricoes = "Código,Cliente"
            .Larguras = "50,300"
            .Sql = sql
            .Titulo = "Pesquisa Cliente"
            .CarregaTela()
            If .DS.Tables(0).Rows.Count > 0 Then
                .ShowDialog()
                If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                    Me.prvIDCliente = .Id
                    Me.txtIDCliente.Text = .Id
                    Me.modoAtual = eModo.eAguardar
                    Me.CarregaDados()
                End If
            Else
                MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                Me.prvIDCliente = 0
                MyBase.Limpar(Me)
                Exit Sub
            End If

        End With
    End Sub

    Private Sub cmdProcuraContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdProcuraContato.Click
        Dim sql As String
        Dim frmDialogo As New frmPesquisa

        If (prvIDCliente > 0) Then
            sql = Me.objContato.sqlConsulta(prvIDCliente)

            With frmDialogo
                .Campos = "iIDContato,sNomeContato"
                .Descricoes = "Código,Nome"
                .Larguras = "50,300"

                .Sql = sql
                .Titulo = "Pesquisa Contato"
                .CarregaTela()
                If .DS.Tables(0).Rows.Count > 0 Then
                    .ShowDialog()
                    If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                        Me.prvIDContato = .Id
                        dsContatos = objContato.selecionarContato(prvIDContato, prvIDCliente, False)
                        Me.CarregaDadosContato(False)
                    End If
                Else
                    MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                    Me.prvIDContato = 0
                End If

            End With
        Else
            MsgBox("Cliente não selecionado.", MsgBoxStyle.Information, Me.Text)

        End If
    End Sub

    Private Sub cmdGravar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGravar.Click

        Dim iIDUsuario As Int32
        Dim bRetorno As Boolean = False

        prvFim = DateAndTime.Now
        iIDUsuario = frmPrincipal.objUsuario.Usuario

        Try
            If (Me.validaFormulario) Then

                bRetorno = objOcorrencias.salvarOcorrencia(prvIDOcorrencia, prvIDCliente, prvIDContato, _
                                                           iIDUsuario, prvIDStatus, txtObservacoes.Text.Trim, prvInicio, _
                                                           prvFim)
                If (bRetorno) Then
                    Me.Text &= " - " & objOcorrencias.IDOcorrencia
                    MyBase.Codigo = objOcorrencias.IDOcorrencia
                    MyBase.modoAtual = eModo.eAguardar
                End If
            Else
                MsgBox(Me.sMensagemValidacao, MsgBoxStyle.Exclamation, Me.Text)
                Me.cmdCancelar.Text = "Cancelar"
                Exit Sub
            End If

        Catch ex As Exception
            bRetorno = False
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)

        End Try
        MyBase.modoAtual = IIf(bRetorno, eModo.eAguardar, eModo.eEditar)
    End Sub

    Private Sub cmdSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSair.Click
        Me.Close()
    End Sub

    Private Sub cmdAgendar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            With frmContatoAgendado
                .Cliente = prvIDCliente
                .ShowDialog()
            End With
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try
    End Sub

    Private Sub cmdLimparCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLimparCliente.Click
        prvIDCliente = 0
        Limpar(Me)
    End Sub

    Private Sub cmdLimparContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLimparContato.Click

        Call LimparDadosContato()

    End Sub

    Private Sub cmdEditarContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEditarContato.Click
        Dim frmContatos As New frmContato2
        With frmContatos
            .IDCliente = Me.prvIDCliente
            .IDContato = Me.prvIDContato
            .NomeCliente = txtNomeCliente.Text
            If (.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                prvIDContato = .IDContato
                CarregaDadosContato(False)
            End If
        End With
    End Sub

    Private Sub cmdEditarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEditarCliente.Click
        Dim frmTelaCliente As New frmCliente

        With frmTelaCliente
            .IDCliente = prvIDCliente

            If (.ShowDialog() = Windows.Forms.DialogResult.OK) Then
                prvIDCliente = .IDCliente
                CarregaDados()
            End If

        End With
    End Sub

    Private Sub cmdAgContato_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAgContato.Click
        Dim frmCadContato As New frmContatoAgendado

        Try
            With frmCadContato
                .Cliente = prvIDCliente
                .Contato = prvIDContato

                .ShowDialog()
            End With
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Me.Text)
        End Try

    End Sub

    Private Sub cmdVisita_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVisita.Click

        Dim frmCdVisita As New frmCadVisitas
        With frmCdVisita
            .Cliente = prvIDCliente
            .Contato = prvIDContato

            .ShowDialog()
        End With

    End Sub

    Private Sub frmOcorrencia_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Call CarregaDados()

    End Sub

    Private Sub cmdCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCancelar.Click

    End Sub

End Class
